<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title>js数组</title>
	</head>
	<script type="text/javascript">
		/*
		 * 数组概念：
		 *    是一个连续存储的空间；
		 *    因为js是弱类型的语言，所以可以存放所有的js的数据类型；
		 *    数组的长度可以动态改变；在不同的赋值时数组有不同的长度；
		 *    通过.length获取数组的长度;
		 *    js有用于创建的数组的对象的Array类；
		 *    数组的 默认的下标索引是正整数，并从0开始；
		 *    数组的下标可以可以其他的任何类型，取值方式 数组名[下标名]或者是 数组名.下标名
		 *    数组的下标可以进行自定义；例如，可以让数组的下标从1开始；或者数组的下标为字符串；
		 *    数组元素默认值是undefined；
		 * 语法：
		 *    var arr0 = new Array(5);
		 *    进行赋值：
		 *         arr0[0] = value;
		 *         arr0[4] = value;
		 *    var arr1 = [值列表];
		 * 
		 *    var arr0 = new Array(值列表);
		 * 
		 */
		
		var arr0 = new Array('小明',1212,"小李");
		document.write("数组的遍历1：<br>")
		// 数组的遍历
		for(i in arr0){
			document.write(arr0[i]+" ");
		}
		
		document.write("<br>数组的遍历2：<br>")
		for(i=0;i<arr0.length;i++){
			document.write(arr0[i]+" ");
		}
		
		var box = new Array(10);						//创建数组，包含10个元素，必须是数字，必须是1位
		box[3] = 'tom';
		box[5] = 'NewYork';
		document.write("<br>box[0]:"+(typeof box[0]))
		document.write("<br>"+box);
		
		// 数组的下标可以是任何类型（js中对象可以以数组的形式进行取值）
		var box1 = [];	
		box1['name'] = 'tom';
		box1['age'] = 28;
		document.write("<br>"+box1);				//如果是字符串下标，不会体现在数组上，而要单独拎出来
		document.write("<br>"+box1['age']);
		document.write("<br>"+box1[0]);				//如果是字符串下标，不会体现在数组上，而要单独拎出来
		document.write("<br>："+box1.age);
		
		// 数组中可以放入任何js类型
		var box2 = [
					{
						name : 'tom',
						age : 28
					},
					[3,4,6,'江苏',new Object()],
					'计算机编程',
					25+25,
					new Array(1,2,3)
					];
		document.write("<br>："+box2);
		document.write("<br>："+box2[0]['name']);
		
		// 创建一个自定义的数组对象，让其下标从0开始，并且默认值为0
		//定义一个数组，注意下标是从1开始
		function makearray(size){
			this.length=size;
			for(i=1;i<=size;i++){
				this[i]=0;
			}
			return this;
		}
		var aa = new makearray(3);
		document.write("length= "+aa.length+"<br>");
		for(i=1;i<=aa.length;i++){
			document.write("aa["+i+"]= "+aa[i]+"<br>");
		}
		
		// 数组对象的方法
		// join方法
		var arr4 = new Array(3)
		arr4[0] = "George"
		arr4[1] = "John"
		arr4[2] = "Thomas"

		document.write("<br>join方法:"+arr4.join('-'))
		
		// 数组的sort排序方法
		// 如果不提供比较函数，则按照字母顺序对数组中的元素进行排序，说得更精确点，是按照字符编码的顺序进行排序。
		// 定义比较函数
		function doSort(a,b){
			// 默认返回值
			var re_val = 0;
			// 提供三个返回值
			if(a>b){
				re_val = 1;
			}
			if(a<b){
				re_val = -1;
			}
			
			return re_val;
		}
		
		var arr5 = [5,6,4,8,7,1];
		document.write("<br>排序之前："+arr5);
		arr5.sort(doSort);
		document.write("<br>排序之后："+arr5);
		
		// slice方法：从第一个参数下标开始取元素，到第二个参数之前结束；和java的substring方法一样
		// 取值的下标范围是 前闭后开；前面是闭区间，后面是开区间；
		var box5 = ['tom', 28, 'NewYork','计算机编程','江苏'];
		var box52 = box5.slice(1,3);			
		document.write("<br>排序之后："+box52);
		
		// splice方法
		var arr = new Array(6)
		arr[0] = "George"
		arr[1] = "John"
		arr[2] = "Thomas"
		arr[3] = "James"
		arr[4] = "Adrew"
		arr[5] = "Martin"

		document.write("<br>"+arr + "<br />")
		arrOld = arr.splice(2,2,"William")
		document.write("<br>"+arr + "<br />")
		document.write("<br>arrOld:"+arrOld + "<br />")
		
		document.write("<br>arrOld.valeof:"+arrOld.valueOf() + "<br />")
</script>

	<body>

	</body>

</html>